"""
@Author: 霍格沃兹测试开发学社-西西
@Desc: 更多测试开发技术探讨，请访问：https://ceshiren.com/t/topic/15860
"""
'''
面向对象和继承多态 实战练习
'''

"""
1、创建一个类（Animal）【动物类】
类里有属性（名称，颜色，年龄，性别）
类方法有：会叫，会跑
"""


class Animal:
    def __init__(self, name, color, age, gender):
        self.name = name
        self.color = color
        self.age = age
        self.gender = gender

    def call(self):
        print(f"{self.name} 正在叫")

    def run(self):
        print("正在奔跑。。。")


"""
2、创建子类【猫】
继承【动物类】，重写父类的__init__方法，继承父类的属性
添加一个新的属性，毛发=短毛
添加一个新的方法， 会捉老鼠，
重写父类的【会叫】的方法，改成【喵喵叫】
"""


# 继承
class Cat(Animal):
    def __init__(self, name, color, age, gender, hair="短毛"):
        super().__init__(name, color, age, gender)
        self.hair = hair

    def catch_mice(self):
        print(f"{self.name} 会抓老鼠的猫是好猫~ ")

    def call(self):
        # 多态
        print(f"{self.name} 正在喵喵叫")

"""
3、创建子类【狗】

继承【动物类】，复写父类的__init__方法，继承父类的属性
添加一个新的属性，毛发=长毛
添加一个新的方法， 会看家
重写父类的【会叫】的方法，改成【汪汪叫】
"""

class Dog(Animal):
    def __init__(self, name, color, age, gender, hair="长毛"):
        super().__init__(name, color, age, gender)
        self.hair = hair

    def outstanding(self):
        print(f"{self.name} 正在看家，会看家的狗是最棒的！")

    def call(self):
        print(f"{self.name} 正在汪汪叫")

"""
4、在入口函数中创建类的实例

创建一个猫猫实例，调用捉老鼠的方法
打印【猫猫的姓名，颜色，年龄，性别，毛发，捉到了老鼠】
创建一个狗狗实例，调用【会看家】的方法
打印【狗狗的姓名，颜色，年龄，性别，毛发】
"""

# 只有你执行当前的这个模块   __name__ == "__main__"
if __name__ == '__main__':
    print("这是python 模块的入口 ")
    cat = Cat("小黄","黄色",3,"母")
    cat.catch_mice()
    print(f"猫猫的姓名：{cat.name}，颜色:{cat.color}，年龄:{cat.age}，性别:{cat.gender}，毛发:{cat.hair}，捉到了老鼠")

    dog = Dog("小白","白色",2,'公')
    dog.outstanding()
    print(f"狗狗的姓名：{dog.name}，颜色:{dog.color}，年龄:{dog.age}，性别:{dog.gender}，毛发:{dog.hair}")
